// `timescale 1ns/1ps

// module led_test_tb;
//     reg signal_a;
//     reg signal_b;
//     reg signal_c;

//     wire led;
//     led_test led_test_0(
//         .a(signal_a),
//         .b(signal_b),
//         .key_in(signal_c),
//         .led_out(led)
//     );

//     initial begin
//         signal_a = 0; signal_b = 0; signal_c = 0;
//         #100;
//         signal_a = 0; signal_b = 0; signal_c = 1;
//         #100;
//         signal_a = 0; signal_b = 1; signal_c = 0;
//         #100;
//         signal_a = 0; signal_b = 1; signal_c = 1;
//         #100;
//         signal_a = 1; signal_b = 0; signal_c = 0;
//         #100;
//         signal_a = 1; signal_b = 0; signal_c = 1;
//         #100;
//         signal_a = 1; signal_b = 1; signal_c = 0;
//         #100;
//         signal_a = 1; signal_b = 1; signal_c = 1;
//         #100;
//         $finish; // 结束仿真
//     end

//     initial begin
//         $dumpfile("led_test.vcd"); // 指定VCD文件名
//         $dumpvars(1, led_test_tb); // 转储顶层模块的变量
//     end

// endmodule

/*
编译指令生成wave

iverilog -o wave led_test.v led_test_tb.v

vvp生成波形图

vvp -n wave

gtkwave打开波形图

gtkwave ./led_test.vcd

*/

`timescale 1ns / 1ps // 设置时间单位和精度

module led_test_tb(); // 测试平台模块
    reg input_a;       // 定义输入信号a的寄存器
    reg input_b;       // 定义输入信号b的寄存器
    reg input_key;     // 定义输入信号key_in的寄存器
    wire output_led;   // 定义输出信号led_out的线网

    // 实例化待测试的模块
    led_test uut (
        .a(input_a),
        .b(input_b),
        .key_in(input_key),
        .led_out(output_led)
    );

    // 测试序列初始化
    initial begin
        // 初始化输入信号
        input_a = 0;
        input_b = 0;
        input_key = 1;

        // 测试case 1: key_in为1时，led_out应等于b
        #20;
        input_a = 0;
        input_b = 1;

        // 测试case 2: key_in为0时，led_out应等于a
        #20;
        input_key = 0;

        // 测试case 3: 改变a的值，观察led_out
        #20;
        input_a = 1;

        // 测试case 4: 改变key_in的值，观察led_out
        #20;
        input_key = 1;

        // 结束测试
        #20;
        $finish;
    end

    // 监控信号变化
    initial begin
        $monitor("Time: %t, input_a: %b, input_b: %b, input_key: %b, output_led: %b",
                 $time, input_a, input_b, input_key, output_led);
    end
endmodule
